﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using WBGModel;
using System.Data;

namespace WBGDal
{
    public class DalLocacao : ICRUD
    {
        public List<ModelLocacao> Listar()
        {
            return Listar("");
        }

        public List<ModelLocacao> Listar(string filtro)
        {
            String cmd = "SELECT Locacao.*, Cliente=Pessoa.nome, TaxaDesconto=TaxaDesconto.nome FROM Locacao LEFT JOIN TaxaDesconto ON TaxaDesconto.id=Locacao.idTaxaDesconto JOIN Cliente ON Cliente.idCliente=Locacao.idCliente JOIN Pessoa ON Pessoa.idPessoa=Cliente.idPessoa" + (filtro.CompareTo("") == 0 ? "" : " WHERE " + filtro);
            return ConvertToList(UtilBanco.ExecComRetorno(cmd));
        }

        private List<ModelLocacao> ConvertToList(DataTable resultSet)
        {
            List<ModelLocacao> lst = new List<ModelLocacao>();
            for (int i = 0; i < resultSet.Rows.Count; i++)
            {
                DataRow dr = resultSet.Rows[i];
                ModelLocacao locacao = new ModelLocacao();
                locacao.idLocacao = Convert.ToInt32(dr["idLocacao"]);
                locacao.idCliente = Convert.ToInt32(dr["idCliente"]);
                locacao.idTaxaDesconto = dr["idTaxaDesconto"].Equals(DBNull.Value) ? 0 : Convert.ToInt32(dr["idTaxaDesconto"]);
                locacao.TaxaDesconto = dr["TaxaDesconto"].Equals(DBNull.Value) ? "" : dr["TaxaDesconto"].ToString();
                locacao.Cliente = dr["Cliente"].ToString();
                locacao.pagoNaRetirada = Convert.ToBoolean(dr["pagoNaRetirada"]); 
                locacao.data = Convert.ToDateTime(dr["data"]);
                locacao.dataDevol = Convert.ToDateTime(dr["dataDevol"]);
                locacao.valorInicial = Convert.ToDecimal(dr["valorInicial"]);
                locacao.valorFinal = Convert.ToDecimal(dr["valorFinal"]);
                lst.Add(locacao);
            }
            return lst;
        }

        public void Inserir(ModelLocacao obj)
        {
            String cmd = String.Format("INSERT INTO Locacao (idCliente,data,dataDevol,pagoNaRetirada,valorInicial,idTaxaDesconto,valorFinal) VALUES ({0},'{1}','{2}','{3}',{4},{5},{6})", obj.idCliente, obj.data, obj.dataDevol, obj.pagoNaRetirada, obj.valorInicial.ToString().Replace(",", "."), obj.idTaxaDesconto, obj.valorFinal.ToString().Replace(",", "."));
            UtilBanco.ExecSemRetorno(cmd);
        }

        public void Alterar(ModelLocacao obj)
        {
            String cmd = String.Format("UPDATE Locacao SET idCliente={0},data='{1}',dataDevol='{2}',pagoNaRetirada='{3}',valorInicial={4},idTaxaDesconto={5},valorFinal={6} WHERE idLocacao={7}", obj.idCliente, obj.data, obj.dataDevol, obj.pagoNaRetirada, obj.valorInicial.ToString().Replace(",", "."), obj.idTaxaDesconto, obj.valorFinal.ToString().Replace(",", "."), obj.idLocacao);
            UtilBanco.ExecSemRetorno(cmd);
        }

        public void Deletar(int id)
        {
            String cmd = String.Format("DELETE FROM Locacao WHERE idLocacao={0}", id);
            UtilBanco.ExecSemRetorno(cmd);
        }
    }
}
